// pages/user/personApply/personApply.js
import WxValidate from "../../../utils/WxValidate";
import { formatTime } from "../../../utils/util";
const app = getApp();
Page({
  //常见问题说明
  showQuestion() {
    wx.showModal({
      title: "常见问题说明",
      content:
        "1、证件号指学生证上的号码。\n2、相关证件正面指的学生证正面。\n3、需 要加急请点击微信客服添加好友加急申请。",
      showCancel: false,
    });
  },
  //复制管理员微信
  copyWX() {
    wx.setClipboardData({ data: "18348660360" });
  },
  //点击阅读并同意
  checkboxChange(e) {
    if (e.detail.value.includes("1")) {
      this.setData({ check: true });
    } else {
      this.setData({ check: false });
    }
  },
  //电子协议书弹窗
  showProtocal() {
    this.setData({ showProtocal: true });
  },
  /**
   * 页面的初始数据
   */
  data: {
    msg: false,
    check: false,
    checkValue: 1,
    showProtocal: false, //电子协议书开关
    content:
      "本规则适用于用户提供代练服务的相关交易事项，用户须接受并遵守 本《交易猫接单协议》的内容。用户通过交易猫打手板平台开展代练服务合作，即授权 并同意接受交易猫按照平台规则对双方的交易进行撮合、提供技术支持，对交易产生的 争议进行调解处理等平台服务。<br>一、签约主体<br> 本协议缔约方为交易猫打手版 APP用户（以下简称“用户”或“您”）与本平台（下称“交易猫打手版平台”）的所有者广 州交易猫信息技术有限公司（下称“交易猫”）。<br>二、定义：<br>1、号主：发布 代练任务的游戏帐号所有人；<br>2、用户：承接号主的代练任务并提供代练服务的用 户；<br>3、代练，是指用户、号主双方通过交易猫平台服务, 由用户按照号主发布的 代练任务要求完成代练服务，从而得到号主给付的相应的服务费用。 <br> 4、保证 金：用户根据本协议约定的条款和条件及本网站其他公示规则的规定，授权并使用支付 宝服务按照交易猫要求的方式冻结的，当用户违反本协议约定或本网站其他公示规则的 规定时用于承担违约责任的资金。保证金包含效率保证金、安全保证金和接单保证金。 <br>5、支付宝服务：指由支付宝（中国）网络技术有限公司（以下简称“支付宝公 司”）向您提供的“支付宝”软件服务系统及附随为您提供的代收代付货款的中介服务。 支付宝服务具体内容，详见您与支付宝公司之间签署生效的《支付宝服务协议》之约定。",
    personInfo: {
      realName: "",
      identityNo: "",
      identityImg: "",
      status: "未审核", //3个状态，未审核 通过审核 未通过审核
    },
    avatarUrl: "", //头像
  },
  //姓名，证件号,输入框防抖
  timeID: 0, //定时器ID
  handleInput(e) {
    const { name } = e.currentTarget.dataset;
    const { value } = e.detail;
    clearTimeout(this.timeID); //清楚timeID对应的定时器，即取消相应函数的执行
    this.timeID = setTimeout(() => {
      if (name == "realName") {
        this.setData({
          "personInfo.realName": value,
        });
      } else {
        this.setData({
          "personInfo.identityNo": value,
        });
      }
    }, 300);
  },
  //上传身份证证件
  uploadImage() {
    //调用wx.chooseMedia API打开图片选择窗口
    wx.chooseMedia({
      count: 1,
      mediaType: ["image"],
      sourceType: ["album", "camera"],
      sizeType: ["original", "compressed"],
      success: (res) => {
        //chooseMedia成功回调
        wx.showLoading({
          title: "上传中",
        });
        //使用wx.uploadFile将图片发至服务端上传
        wx.uploadFile({
          filePath: res.tempFiles[0].tempFilePath, //文件暂存路径
          name: "img", //文件对应的 key
          url: `${app.globalData.server}/uploadImg`, //服务端路由
          success: (result) => {
            //成功回调
            //result.data为字符串，使用JSON.parse转成对象
            let filePath = JSON.parse(result.data).path;
            //文件路径为\反斜杠，需要转为斜杠/，使用正则表达式进行过滤转换
            filePath = filePath.replace(/\\/g, "/");
            //console.log(filePath)
            let personInfo = this.data.personInfo;
            //将完整的文件路径（含有域名信息）赋值给personInfo
            personInfo.identityImg = `${app.globalData.server}/${filePath}`;
            // 接单图片详情信息
            wx.setStorageSync("identityImg", [
              ...wx.getStorageSync("identityImg"),
              `${app.globalData.server}/${filePath}`,
            ]);
            this.setData({
              personInfo,
            });
            wx.hideLoading({});
            wx.showToast({
              title: "上传成功",
              icon: "success",
            });
          },
          fail: (e) => {
            //失败回调
            console.log(e);
            wx.hideLoading({});
            wx.showToast({
              title: "上传失败",
              icon: "error",
            });
          },
        });
      },
      fail: (error) => {
        //chooseMedia失败回调
        console.log(error);
        wx.showToast({
          title: "上传失败",
          icon: "error",
        });
      },
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    //获取头像
    this.setData({ avatarUrl: app.globalData.userInfo.avatarUrl });
    //加载表单验证规则
    this.initValidate();
  },
  //初始化验证规则
  initValidate() {
    // 验证字段的规则
    const rules = {
      realName: { required: true, maxlength: 10 },
      identityNo: { required: true, maxlength: 20 },
      identityImg: { required: true },
    };
    // 验证字段的提示信息，若不传则调用默认的信息
    const messages = {
      realName: {
        required: "请输入真实姓名",
        maxlength: "姓名不能超过10个字符",
      },
      identityNo: {
        required: "请输入你的证件号",
        maxlength: "证件号码不能超过20个字符",
      },
      identityImg: { required: "请上传证件正面照片！" },
    };
    // 创建实例对象
    this.WxValidate = new WxValidate(rules, messages);
  },
  //表单验证错误提示
  showValidateModal(error) {
    wx.showModal({ content: error.msg, showCancel: false });
  },
  //提交表单
  submitForm() {
    const { personInfo } = this.data;
    //表单验证
    if (!this.WxValidate.checkForm(personInfo)) {
      const error = this.WxValidate.errorList[0];
      this.showValidateModal(error);
      return false;
    }
    //判断是否勾选 阅读并同意《相关条款》
    if (!this.data.check) {
      this.setData({
        msg: true,
        //震动提示 阅读并同意
      });
      const that = this;
      setTimeout(() => {
        that.setData({
          msg: false,
          //关闭震动提示
        });
      }, 320);
      return;
    }

    //加载中
    wx.showLoading();
    personInfo.applyTime = formatTime(new Date());
    //表单验证完毕，接下来向后端发送数据
    wx.request({
      url: `${app.globalData.server}/wxApplyOrder`,
      method: "POST",
      data: { openid: app.globalData.userInfo.openid, personInfo },
      success: (res) => {
        console.log(res);
        wx.hideLoading();
        if (res.data === "success") {
          //提示
          wx.showToast({ title: "提交成功", icon: "success" });
          //跳转至个人中心页面
          setTimeout(() => {
            wx.switchTab({ url: "../person/person" });
          }, 1000);
        } else {
          //提示
          wx.showToast({ title: "提交失败", icon: "error" });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.log(err);
        //提示
        wx.showToast({ title: "提交失败", icon: "error" });
      },
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
});
